function parseRecursive(tokens) {
    if (tokens.length === 0) return null;

    const token = tokens.shift();
    if (token === '[') {
        const operator = tokens.shift(); // 获取运算符
        const operand1 = tokens.shift(); // 获取第一个操作数
        const operand2 = parseRecursive(tokens); // 递归解析第二个操作数
        if (tokens.shift() !== ']') throw new Error('Expected closing bracket');
        return [operator, operand1, operand2];
    } else {
        return token;
    }
}

const tokens = ['[', '+', 12, '[', '-', 23, 45, ']', ']'];
const astRecursive = parseRecursive([...tokens]);
console.log(astRecursive);

// 递归方法通过递归函数的调用来解析输入的 token 列表。当遇到嵌套结构时，递归函数会递归地调用自身来处理嵌套部分，直到解析完成。
// 在处理嵌套部分时，递归函数会在内部状态中保存当前解析的位置，并在处理完嵌套部分后返回上一级，继续解析后续的 token。
